docs(guide): make three drifted counts on ci-cd-pipeline.md self-maintaining - #8121
Conversation
…taining Three sentences on `content/docs/guide/ci-cd-pipeline.md` carried copied numerals qualifying a file/document population with no measurement point declared, so each was true on the day it was written and silently wrong afterwards. Refreshing the numerals only restarts that clock, so each sentence now either states its population and points at the live reading its own gate prints on every run, or carries a declared measurement point. - "measured across 143 files and 558 literals" -> names the population (every `.md`/`.mdx` page under `content/docs`) and points at the `check-doc-component-types` verdict line that prints the counts. - "the other four still return 203 of today's 207 files" -> the argument is the relation (a per-root floor survives one root reading zero, a total floor does not), so it now stands with no numeral at all and points at the per-root census the verdict line prints. - "73 files / 1996 tests" -> re-read from the suite's own summary and anchored to a measurement point, keeping the subject a TEST-file population: "112 test files / 3360 tests on `main@59a3a23`". The two neighbouring sentences that look stale but are correct because each declares the tree it measured (`main@6422aa8`, and the 5281 first-parent commit window) are untouched. objectui#7965. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
|
Standing down on
Every other check on Generated by Claude Code |
|
Armed — squash auto-merge enabled and the PR is in the merge queue,
On MERGED: content probe on re-fetched Generated by Claude Code |
|
LANDED — merged at 2026-09-06T17:31:09Z as Content probe on re-fetched
#7965 closed by the Generated by Claude Code |
Fixes #7965
Three sentences on
content/docs/guide/ci-cd-pipeline.mdqualified a file/document population with acopied numeral and no declared measurement point. Each numeral was re-taken from that figure's own
gate verdict line — never re-counted by hand — and each sentence was then rewritten so it stays
true as the tree moves, rather than being refreshed to today's number.
Base
59a3a233d· head6528b3fe4· one file changed, 10 insertions / 7 deletions.The verdict lines these fixes rest on (verbatim, run on this branch)
node scripts/check-doc-component-types.mjs(exit 0):node scripts/check-shell-escape-residue.mjs(exit 0):pnpm exec vitest run scripts/__tests__/at head6528b3fe4(exit 0):Difference from the card. The card measured 206 files / 889 literals / 107 test files. Two of the
three still read the same today (206 total files with the four-file
.claude/skillsroot inside it;889 literals). The test population has moved again since the card was written: 112 test files and
3360 tests, not 107. That movement inside one working day is itself the argument for not writing a
bare numeral here.
The three sentences
1.
:782— "measured across 143 files and 558 literals" → route (a), live readingBefore:
After:
Why (a) and not (b). The sentence's job is to say the corpus is large and mixed, not to state a
size, so the numeral was load-bearing for nothing — and the pairing was already wrong in a way a
refresh would have preserved:
143is the gate's source-file count (the registry derivation),while the literals come from the doc files it walks, which the same line reports as
188. Asentence reading "in these pages ... measured across 143 files" therefore pinned a doc-corpus claim
to a source-file count. Naming the population (
content/docs,.md+.mdx) and pointing at theverdict line removes both the drift and the mis-pairing. The trailing clause is deliberate: it tells
the next reader why there is no number here, so the sentence is not "repaired" back into one.
2.
:1083— "the other four still return 203 of today's 207 files" → route (a), relation restatedBefore:
After:
Why (a). This paragraph's point is a RELATION — a per-root floor survives one root reading zero, a
total floor does not — and
203 of 207was only an illustration of it. Restating the relation makesthe argument independent of any count, and the gate already prints the per-root census (
AGENTS.md: 1 file(s) ...; .claude/skills: 4 file(s) ...) on every run, so a reader who wants the sizes getstoday's, not a copy. A measurement point (route b) would have worked here too but reads worse: it
would have anchored two numerals in a sentence whose whole force is that the numerals do not matter.
3.
:1440— "73 files / 1996 tests" → route (b), declared measurement pointBefore:
After:
Why (b). In a narrow table cell the route-(a) phrasing ("the run prints its own totals") displaces
the cell's actual job, which is to say what the command covers and roughly how big it is. A declared
measurement point keeps the sizing and makes the sentence permanently true, exactly the way
:576'sMeasured on main@6422aa891does two sections up.Subject kept accurate. This is a TEST-file population, not a document population. The cell now
says "112 test files", not "112 files", so nobody reads it as a docs count later.
What happened to the
~50 scell. Nothing — it is untouched. It is a duration, not a count, andonly the middle cell was rewritten. Recorded for the reviewer: the two runs on this branch took
116.6 s and 104.7 s, but that is a shared container running several agents in parallel, so it is not a
measurement comparable with whatever produced the
~figure. Changing it on this evidence would be aguess, which is the failure mode this card exists to stop.
The two correct neighbours did not move
Both declare the tree they measured, so both are still true and neither is a defect:
:576—Measured on `main@6422aa891`: 18 guide files, 91 candidate spans ...:1658—Across all 5281 first-parent commits on `main` ...Proof, and it is mechanical rather than a promise — the diff has exactly three hunks and none of their
ranges contains either line:
Line 576 is untouched at 576; the neighbour formerly at 1658 is byte-identical and now sits at 1661,
shifted only by the three lines the second hunk added. Both were compared against
59a3a233d:content/docs/guide/ci-cd-pipeline.mddirectly and match.No gate, no pin, no new scan population
One file changed. No gate script, no workflow, no test, no other page, nothing under
packages/. Thecoverage-expansion work that would make this class fail loudly on
content/docsis objectui#7966'sfamily and is deliberately not started here.
Gates (all at head
6528b3fe4, exit codes captured by redirect-then-capture)pnpm exec vitest run scripts/__tests__/ci-cd-pipeline-doc.test.ts(before and after)Test Files 1 passed (1)·Tests 44 passed (44)— the page's pins stay green, none of them reads one of the three sentencespnpm exec vitest run scripts/__tests__/Test Files 112 passed (112)·Tests 3360 passed (3360)node scripts/check-doc-component-types.mjs/pnpm check:doc-types✅ Every documented component type is registered.node scripts/check-shell-escape-residue.mjs✅ check-shell-escape-residue: OK (5/5 root(s) resolved ...)pnpm check:doc-fences✅ check:doc-fences — every TypeScript block in 227 document(s) is fenced ts/tsx/typescript ...pnpm check:doc-snippetsSemantic phase: 561 of 561 block(s) judged, 0 failed.(after the scoped build the gate itself prescribes —turbo run build $(node scripts/check-doc-snippet-types.mjs --build-filter) --concurrency=2, 34/34 tasks successful)node scripts/check-doc-links.mjsLinks are valid across 17 scan roots.node scripts/check-doc-expression-carriage.mjsnode scripts/check-docs-route-eager-closure.mjsnode scripts/check-skills-paths.mjsskills/ — 28/28 resolve across 16 file(s)node scripts/check-bash32-floor.mjs✓ check-bash32-floor: 12 tracked shell file(s) ...pnpm check:control-bytes✅ check-control-bytes: OK (scanned 6495 tracked text file(s); skipped 85 binary).grep -naPcontrol-byte self-scan of the changed pathnode scripts/check-changeset-presence.mjs✅ No source or published contract of a released package changed in this range, so no changeset is owed.— so no changeset is addednode scripts/check-governed-queue-guard.mjs --test content/docs/guide/ci-cd-pipeline.md✅ NOT GOVERNED — 1 path(s) checked against 5 governed surface(s); none matched.The gate list was re-derived against the actual diff rather than taken from the dispatch: every
script under
scripts/that readscontent/docswas enumerated and run, which is where the lastfour doc gates in the table came from.
Live E2E (informational)is red on every branch today for an upstream reason unrelated to thischange.
Generated by Claude Code